﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <!-- Documenting T:NAnt.Core.Tasks.IfTask-->
  <head>
    <meta http-equiv="Content-Language" content="en-ca" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <link rel="stylesheet" type="text/css" href="../style.css" />
    <title>&lt;if&gt; Task</title>
  </head>
  <body>
    <table width="100%" border="0" cellspacing="0" cellpadding="2" class="NavBar">
      <tr>
        <td class="NavBar-Cell">
          <a href="http://nant.sourceforge.net">
            <b>NAnt</b>
          </a>
          <img alt="-&gt;" src="../images/arrow.gif" />
          <a href="../index.html">Help</a>
          <img alt="-&gt;" src="../images/arrow.gif" />
          <a href="../tasks/index.html">Task Reference</a>
          <img alt="-&gt;" src="../images/arrow.gif" /> &lt;if&gt;</td>
        <td class="NavBar-Cell" align="right">
                        v0.91-alpha2</td>
      </tr>
    </table>
    <h1>&lt;if&gt;</h1>
    <p class="topicstatus">[This is preliminary documentation and subject to change.]</p>
    <p> Checks the conditional attributes and executes the children if <b>true</b>. </p>
    <p> If no conditions are checked, all child tasks are executed. </p>
    <p> If more than one attribute is used, they are &amp;&amp;'d. The first to fail stops the check. </p>
    <p> The order of condition evaluation is, <code>targetexists</code>, <code>propertyexists</code>, <code>propertytrue</code>, <code>uptodatefile</code>. </p>
    <p class="i2">
      <b>Note:</b>  instead of using the deprecated attributes, we advise you to use the following functions in combination with the <code>test</code> attribute: </p>
    <div class="table">
      <table>
        <tr>
          <th>Function</th>
          <th>Description</th>
        </tr>
        <tr>
          <td>
            <a href="../functions/property.exists(System.String).html">property::exists()</a>
          </td>
          <td>Checks whether the specified property exists.</td>
        </tr>
        <tr>
          <td>
            <a href="../functions/target.exists(System.String).html">target::exists()</a>
          </td>
          <td>Checks whether the specified target exists.</td>
        </tr>
      </table>
    </div>
    <h3>Parameters</h3>
    <div class="table">
      <table>
        <tr>
          <th>Attribute</th>
          <th style="text-align: center;">Type</th>
          <th>Description</th>
          <th style="text-align: center;">Required</th>
        </tr>
        <tr>
          <td valign="top">comparefile</td>
          <td style="text-align: center;">string</td>
          <td>
            <i>Deprecated.</i>  The file to check against for the uptodate file. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">propertyexists</td>
          <td style="text-align: center;">string</td>
          <td>
            <i>Deprecated.</i>  Used to test whether a property exists. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">propertytrue</td>
          <td style="text-align: center;">string</td>
          <td>
            <i>Deprecated.</i>  Used to test whether a property is true. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">targetexists</td>
          <td style="text-align: center;">string</td>
          <td>
            <i>Deprecated.</i>  Used to test whether a target exists. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">test</td>
          <td style="text-align: center;">string</td>
          <td> Used to test arbitrary boolean expression. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">uptodatefile</td>
          <td style="text-align: center;">string</td>
          <td>
            <i>Deprecated.</i>  The file to compare if uptodate. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">failonerror</td>
          <td style="text-align: center;">bool</td>
          <td> Determines if task failure stops the build, or is just reported. The default is <b>true</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">if</td>
          <td style="text-align: center;">bool</td>
          <td> If <b>true</b> then the task will be executed; otherwise, skipped. The default is <b>true</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">unless</td>
          <td style="text-align: center;">bool</td>
          <td> Opposite of <code>if</code>. If <b>false</b> then the task will be executed; otherwise, skipped. The default is <b>false</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
        <tr>
          <td valign="top">verbose</td>
          <td style="text-align: center;">bool</td>
          <td> Determines whether the task should report detailed build log messages. The default is <b>false</b>. </td>
          <td style="text-align: center;">False</td>
        </tr>
      </table>
    </div>
    <h3>Nested Elements:</h3>
    <!--Element-->
    <h4>
      <a id="comparefiles">
      </a>
                    &lt;<a href="../types/fileset.html">comparefiles</a>&gt;
                </h4>
    <div class="nested-element">
      <i>Deprecated.</i>  The <a href="../types/fileset.html">&lt;fileset&gt;</a> that contains the comparison files for the <code>uptodatefile</code>(s) check. <p /></div>
    <h4>
      <a id="comparefiles">
      </a>
                    &lt;/<a href="../types/fileset.html">comparefiles</a>&gt;
                </h4>
    <!--Element-->
    <h4>
      <a id="uptodatefiles">
      </a>
                    &lt;<a href="../types/fileset.html">uptodatefiles</a>&gt;
                </h4>
    <div class="nested-element">
      <i>Deprecated.</i>  The <a href="../types/fileset.html">&lt;fileset&gt;</a> that contains the uptodate files for the <code>comparefile</code>(s) check. <p /></div>
    <h4>
      <a id="uptodatefiles">
      </a>
                    &lt;/<a href="../types/fileset.html">uptodatefiles</a>&gt;
                </h4>
    <h3>Examples</h3>
    <ul class="examples">
      <li>
        <p>Tests the value of a property using expressions.</p>
        <pre class="code">
&lt;if test="${build.configuration=='release'}"&gt;
    &lt;echo&gt;Build release configuration&lt;/echo&gt;
&lt;/if&gt;
    </pre>
      </li>
      <li>
        <p>Tests the the output of a function.</p>
        <pre class="code">
&lt;if test="${not file::exists(filename) or file::get-length(filename) = 0}"&gt;
    &lt;echo message="The version file ${filename} doesn't exist or is empty!" /&gt;
&lt;/if&gt;
    </pre>
      </li>
      <li>
        <p>
          <code>(Deprecated)</code> Check that a target exists.</p>
        <pre class="code">
&lt;target name="myTarget" /&gt;
&lt;if targetexists="myTarget"&gt;
    &lt;echo message="myTarget exists" /&gt;
&lt;/if&gt;
    </pre>
      </li>
      <li>
        <p>
          <code>(Deprecated)</code> Check existence of a property.</p>
        <pre class="code">
&lt;if propertyexists="myProp"&gt;
    &lt;echo message="myProp Exists. Value='${myProp}'" /&gt;
&lt;/if&gt;
    </pre>
      </li>
      <li>
        <p>
          <code>(Deprecated)</code> Check that a property value is true.</p>
        <pre class="code">
&lt;if propertytrue="myProp"&gt;
    &lt;echo message="myProp is true. Value='${myProp}'" /&gt;
&lt;/if&gt;
    </pre>
      </li>
      <li>
        <p>
          <code>(Deprecated)</code> Check that a property exists and is <b>true</b> (uses multiple conditions). </p>
        <pre class="code">
&lt;if propertyexists="myProp" propertytrue="myProp"&gt;
    &lt;echo message="myProp is '${myProp}'" /&gt;
&lt;/if&gt;
    </pre>
        <p>which is the same as</p>
        <pre class="code">
&lt;if propertyexists="myProp"&gt;
    &lt;if propertytrue="myProp"&gt;
        &lt;echo message="myProp is '${myProp}'" /&gt;
    &lt;/if&gt;
&lt;/if&gt;
    </pre>
      </li>
      <li>
        <p>
          <code>(Deprecated)</code> Check file dates. If <code>myfile.dll</code> is uptodate, then do stuff. </p>
        <pre class="code">
&lt;if uptodatefile="myfile.dll" comparefile="myfile.cs"&gt;
    &lt;echo message="myfile.dll is newer/same-date as myfile.cs" /&gt;
&lt;/if&gt;
    </pre>
        <p>or</p>
        <pre class="code">
&lt;if uptodatefile="myfile.dll"&gt;
    &lt;comparefiles&gt;
        &lt;include name="*.cs" /&gt;
    &lt;/comparefiles&gt;
    &lt;echo message="myfile.dll is newer/same-date as myfile.cs" /&gt;
&lt;/if&gt;
    </pre>
        <p>or</p>
        <pre class="code">
&lt;if&gt;
    &lt;uptodatefiles&gt;
        &lt;include name="myfile.dll" /&gt;
    &lt;/uptodatefiles&gt;
    &lt;comparefiles&gt;
        &lt;include name="*.cs" /&gt;
    &lt;/comparefiles&gt;
    &lt;echo message="myfile.dll is newer/same-date as myfile.cs" /&gt;
&lt;/if&gt;
    </pre>
      </li>
    </ul>
    <h3>Requirements</h3>
    <div style="margin-left: 20px;">
      <b>Assembly:</b> NAnt.Core (0.91.3881.0)
            </div>
  </body>
</html>